#include "server.h"

int main(int argc, char const *argv[])
{
	if (argc != 2)
	{
		printf("输入的格式错误 %s port\n", argv[0]);
		exit(1);
	}

	// 初始化UDP
	int sock_fd = UDP_init(atoi(argv[1]));

	// 缓冲区
	char buf[1024];
	memset(buf, 0, sizeof(buf));

	// 客户端信息结构体
	struct sockaddr_in client_addr;

	// 结构体的长度
	socklen_t client_len = sizeof(client_addr);

	// 新用户结构体
	user_data new_user;

	int name_len;

	// 定义顺序表
	user_list list;
	list.len = 0;

	while (1)
	{
		memset(buf, 0, sizeof(buf));

		// 接收来自客户端发来的信息
		recvfrom(sock_fd, buf, sizeof(buf), 0, (struct sockaddr *)&client_addr, &client_len);

		// 判断是否修改名称，认定为增加用户
		if (strstr(buf, "set_name_") != NULL)
		{
			strcpy(new_user.name, buf + 9);
			name_len = strlen(new_user.name);
			new_user.name[name_len - 4] = '\0';

			// 写入用户信息结构体
			new_user.sock_addr = client_addr;

			// 写入用户信息结构体的长度
			new_user.sock_len = sizeof(new_user.sock_addr);

			// 将新用户添加到顺序表中
			tail_insert_tail(&list, new_user);

			// 群发欢迎用户加入群聊 所有人都发
			memset(buf, 0, sizeof(buf));

			sprintf(buf, "欢迎 %s 加入群聊\n", new_user.name);
			for (size_t i = 0; i < list.len; i++)
			{
				sendto(sock_fd, buf, strlen(buf), 0, (struct sockaddr *)&list.data[i].sock_addr, new_user.sock_len);
			}

			continue;
		}
	}

	UDP_close();
	return 0;
}